package intermouse;

import java.util.List;

/**
 * A kő osztály
 * 
 * @author      Sőre András, Szórádi Balázs
 * @version     1.0
 * @since       2013-03-24
 */
public class Stone extends FieldObject {

	/**
	 * A Stone osztály konstruktora.
	 */
	Stone(){
		super();
		fieldType = FieldTypes.Stone;
	}
	
	/**
	 * Ide léphet-e egy másik kő
	 * @param stone Idelépni akaró kő
	 * @param isFirst első lépni akaró kör a sorban
	 * @param direction lépés iránya
	 * @return
	 * megadja a paraméterként kapott kőnek hogy a field mezőre léphet-e.
	 */
	boolean canStep(Stone stone, boolean isFirst, int direction){
		//System.out.println(">> Stone.canStep(Stone, boolean, int) : bool");
		if(!isFirst) 
			return false;
		if (field.getAdjacentFields().get(direction) == null)
			return false;
		boolean can = field.getAdjacentFields().get(direction).canStep(this, false, direction);
		if(can){
			//ez a kő arrébb lép (eltolódik)
			String oldField = field.toString();  //Mike Oldfield
			setDead(true);
			Stone newStone = new Stone();
			newStone.setField(field.getAdjacentFields().get(direction));
			TestCommandParser.log("Stone moved from "+oldField+" to "+field.toString()+".");
		}
		//System.out.println("<< return");
		return can;
	}
	
	/**
	 * Ide léphet-e egy hangyász
	 * @param antEater Idelépni akaró hangyász
	 * @param direction lépés iránya
	 * @return
	 * megadja a paraméterként kapott hangyásznak hogy a field mezőre léphet-e.
	 */
	boolean canStep(AntEater antEater, int direction){
		//System.out.println(">> Stone.canStep(AntEater, int) : bool");
		//System.out.println("<< return");
		if(this.field.getAdjacentFields().get(direction).canStep(this, true, direction)){
			//kő mozog a szomszédra, this.setField(...) a Field-beli iteráció miatt nem lehet
			setDead(true);
			Stone newStone = new Stone();
			newStone.setField(this.field.getAdjacentFields().get(direction));
			//System.out.println(this.field.getAdjacentFields().get(direction).toString());
			return true;
		}else{
			return false;
		}
		//                    pamparamramam                                       
	}
	
	/**
	 * Ide léphet-e egy hangya - nem
	 * @param ant Idelépni akaró hangya
	 * @return
	 * megadja a paraméterként kapott hangyának hogy a field mezőre léphet-e.
	 */
	boolean canStep(Ant ant){
		//System.out.println(">> Stone.canStep(Ant) : bool");
		//System.out.println("<< return");
		return false;
	}
	
}
